import { ref } from 'vue'

interface IBase {
  id: string
  [x: string]: any
}

interface IParialParams {
  [x: string]: any
}

/**
 *
 * @param url 请求地址
 * @param listKey 列表数据在返回结果中的key，默认list
 * @returns
 */
export const useQuery = (url: string, listKey = 'list') => {
  // paging组件实例
  const pagingRef = ref(null)
  // v-model绑定的这个变量不要在分页请求结束中自己赋值，直接使用即可
  const dataList = ref<IBase[] | []>()
  // 请求参数
  const queryParams = ref<IParialParams>({})

  // @query所绑定的方法不要自己调用！！需要刷新列表数据时，只需要调用paging.value.reload()即可
  const queryList = async (pageNo: number, pageSize: number) => {
    try {
      // 将请求结果通过complete传给z-paging处理，同时也代表请求结束，这一行必须调用
      // const res = await getFoo({
      //   url,
      //   query: { pageNum: pageNo },
      //   hideRequestLoading: pageNo !== 1,
      // })
      // pagingRef.value.complete(res?.[listKey])
      pagingRef.value.complete([
        { id: 1 },
        { id: 2 },
        { id: 3 },
        { id: 4 },
        { id: 5 },
        { id: 6 },
        { id: 7 },
        { id: 8 },
        { id: 9 },
        { id: 10 },
      ])
    } catch (error) {
      // 如果请求失败写paging.value.complete(false);
      pagingRef.value.complete(false)
      console.log(`🚀 ~ queryList ~ error:`, error)
    }
  }

  return {
    pagingRef,
    dataList,
    queryParams,
    queryList,
  }
}
